プライベートサブネットのWindows仮想マシンに特定のIPアドレスからのRDP接続を許可する

プライベートサブネットのWindows仮想マシンに特定のIPアドレスからのRDP接続を許可する

Clock Icon2025.01.02

はじめに

SSMを使用すれば踏み台サーバーを経由せずにプライベートサブネットのWindows仮想マシンにリモートデスクトップ接続(RDP)を行うことができます。しかし、セキュリティ上の理由から、特定のIPアドレスからのRDP接続のみを許可することが望ましい場合があります。本記事では、プライベートサブネットのWindows仮想マシンに特定のIPアドレスからのRDP接続を許可する手順について説明します。

前提条件

今回の検証では以下のバージョンを使用しました。

$ aws --version
aws-cli/2.19.1 Python/3.12.6 Darwin/23.6.0 exe/x86_64

$ session-manager-plugin --version
1.2.694.0

IAMポリシーの設定

このIAMポリシーは、特定のIPアドレス以外からの操作を全て拒否し、特定のEC2インスタンスに対してSSMの StartSession を許可します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "xxx.xxx.xxx.xxx/32"
                    ]
                },
                "Bool": {
                    "aws:ViaAWSService": "false"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:ec2:ap-northeast-1:999999999999:instance/i-XXXXXXXXXXXXXXXXX",
                "arn:aws:ssm:*:*:document/AWS-StartPortForwardingSession"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession",
                "ssm:ResumeSession"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:userid}-*"
            ]
        }
    ]
}

このポリシーを特定のIAMユーザーにアタッチします。

ポートフォワーディングの設定

AWS CLIを使用してポートフォワーディングの設定を行います。以下のコマンドを実行します。

$ aws ssm start-session --target i-XXXXXXXXXXXXXXXXX --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389,localPortNumber=33389"

Starting session with SessionId: test-xxxxxxxxxxxxxxxxxxxxxxxxxx
Port 33389 opened for sessionId test-xxxxxxxxxxxxxxxxxxxxxxxxxx.
Waiting for connections...

EC2インスタンスのIDは適宜変更してください。
また、リモートデスクトップのデフォルトポート番号は3389ですが、ローカルのポート番号は任意の番号を指定できます。ここでは33389を指定しています。

エラーが発生した場合

なお、特定のIPアドレス以外でコマンドを実行した場合、以下のようなエラーメッセージが表示されます。

An error occurred (AccessDeniedException) when calling the StartSession operation: User: arn:aws:iam::999999999999:user/test is not authorized to perform: ssm:StartSession on resource: arn:aws:ec2:ap-northeast-1:999999999999:instance/i-XXXXXXXXXXXXXXXXX with an explicit deny in an identity-based policy

ローカルマシンのIPアドレスが想定した値であるか、IAMユーザにアタッチされている他のポリシーによって拒否されていないかを確認してください。

リモートデスクトップ接続

リモートデスクトップクライアントを起動し、以下の設定で接続します。ここではMacからの接続を例に説明します。

スクリーンショット 2025-01-02 17.12.39

さいごに

さらにセキュリティを強化するためには、IAMユーザーに対してMFAを設定することをお勧めします。また、IAMポリシーの設定については、適切な権限を持つIAMユーザーにのみアタッチするようにしてください。

MFAの設定方法については、以下の記事も合わせてご参照ください。

https://dev.classmethod.jp/articles/forced_mfa/

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.